package com.example.jsoup.kuang.question;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by HMF on 2021/10/12 16:04
 */
public class DetailPagePlus {

    public static void main(String[] args) throws Exception {
//        Map<String, String> pageData = getPageData("/needs/detailThe?type=1&id=116514", 1);
        Map<String, String> pageData = getPageData("/needs/detailThe?type=2&id=3198", 2);

        System.out.println("\njjjjjjjjjjjjjjjjjjjjj::::::::::::: \n" + pageData);

        System.out.println();
        System.out.println();
        System.out.println();

        System.out.println("\ntitle：\n" + pageData.get("need_name"));
        System.out.println("\ntime：\n" + pageData.get("public_time"));
        System.out.println("\nsource：\n" + pageData.get("source"));
        System.out.println("\nmoney：\n" + pageData.get("money"));

        System.out.println("\nindustry_category：\n" + pageData.get("industry_category"));
        System.out.println("\narea：\n" + pageData.get("area"));
        System.out.println("\ndemand_side：\n" + pageData.get("demand_side"));

        // type = 1
//        System.out.println("\nbackground_content：\n" + pageData.get("background_content"));
//        System.out.println("\nproblem_content：\n" + pageData.get("problem_content"));
//        System.out.println("\nbackground_content：\n" + pageData.get("background_content"));

        // type = 2
        System.out.println("\ndescribe_content：\n" + pageData.get("describe_content"));

        System.out.println("\n\n\n/////////////////////////////////");
    }

    // 技术需求详情 type=1
    // 服务需求详情 type=2

    /**
     * @param pageUrl 详情页 url
     * @param type    (技术需求详情 type=1)、（服务需求详情 type=2)
     * @return （need_name:需求名称）、(public_time:发布时间）、(source:来源)、（money:预算）、
     * （industry_category:行业分类）、（area:地区）、（demand_side:需求方）、
     * (background_content:需求背景 type=1）、（problem_content:需解决的难题 type=1）、（goal_content:技术目标 type=1）、
     * (describe_content:需求描述 type=2)
     * @throws Exception
     */
    public static Map<String, String> getPageData(String pageUrl, int type) throws Exception {

        Map<String, String> pageDataMap = new HashMap<>();

        // 需要爬取并且入库的内容 title、base、msg
        // title
        String need_name = ""; // 需求名称
        String public_time = ""; // 发布时间
        String source = ""; // 来源
        String money = ""; // 预算
        int money_flag = 1; // 是否双方协商  0：否、1：是

        // base
        String industry_category = ""; // 行业分类
        String area = ""; // 地区
        String demand_side = ""; // 需求方

        // msg
        // type = 1
        String background_content = ""; // 需求背景
        String problem_content = ""; // 需解决的主要技术难题
        String goal_content = ""; // 拟实现的主要技术目标/具体指标

        // type = 2
        String describe_content = ""; // 需求描述

        // 后面的 /needs/detailThe?type=1&id=116513 是需要更换的
        // 请求的页面地址
        String url = "https://www.kczg.org.cn" + pageUrl;
//        String url = "https://www.kczg.org.cn/needs/detailThe?type=1&id=114329";  // 数据少的页面

        // 解析返回的html页面，生成 Document 对象
        Document document = Jsoup.parse(new URL(url), 5000);

        // 需要爬取内容的外层 div
        Element parent_div = document.getElementsByClass("detail-con").first();

        /**
         * title标题 div
         */
        Element div_title = parent_div.getElementsByClass("title").first();

        // 需求名称
        need_name = div_title.getElementsByClass("title-label").text();
        pageDataMap.put("need_name", need_name);
//        System.out.println("\nneed_name:::::  \n" + need_name);

        // 发布时间
        public_time = div_title.getElementsByClass("fl").get(0).text().split(":")[1].trim();
        pageDataMap.put("public_time", public_time);
//        System.out.println("\npublic_time:::::  \n" + public_time);

        // 来源
        source = div_title.getElementsByClass("fl").get(1).text().split(":")[1].trim();
        pageDataMap.put("source", source);
//        System.out.println("\nsource:::::  \n" + source);

        // 预算
//        money = div_title.getElementsByClass("money").first().getElementsByTag("span").text().replace("万", "");
//        money = div_title.getElementsByClass("money").first().getElementsByTag("span").text();

        String money_text = div_title.getElementsByClass("money").first().getElementsByTag("span").text();
        String[] str = money_text.split("万");

        if (str.length > 0) { // 说明有 万 字
            money = str[0]; // 取前面的 数字 ，如原来是 500万，这里就取了 500
            money_flag = 0;

            pageDataMap.put("money", money);
            pageDataMap.put("money_flag", money_flag + "");
        } else {
//            money = null;
            money_flag = 1;

            pageDataMap.put("money", null);
            pageDataMap.put("money_flag", money_flag + "");
        }

//        pageDataMap.put("money", money);
//        System.out.println("\nmoney:::::  \n" + money);


        /**
         * base基本信息base div
         */
        Element div_base = parent_div.getElementsByClass("base").first();

        Elements p_list = div_base.getElementsByClass("base-detail").first().getElementsByTag("p");

        industry_category = p_list.get(0).getElementsByTag("span").text();
        area = p_list.get(1).getElementsByTag("span").text();
        demand_side = p_list.get(2).getElementsByTag("span").text();

        pageDataMap.put("industry_category", industry_category);
        pageDataMap.put("area", area);
        pageDataMap.put("demand_side", demand_side);

//        System.out.println("\nindustry_category:::::  \n" + industry_category);
//        System.out.println("\narea:::::  \n" + area);
//        System.out.println("\ndemand_side:::::  \n" + demand_side);

        /**
         * msg详细信息 div_msg 列表
         */
        Elements div_msg_list = parent_div.getElementsByClass("msg");

        // 技术需求详情 type=1
        // 服务需求详情 type=2
        if (type == 1) {
            String backgroundTitle = "需求背景";
            String problemTitle = "需解决的主要技术难题";
            String goalTitle = "拟实现的主要技术目标/具体指标";

            for (int i = 0; i < div_msg_list.size(); i++) {
                String msg_html = div_msg_list.get(i).html();
                String contentTitle = div_msg_list.get(i).getElementsByClass("msg-label").text();

                if (contentTitle.equals(backgroundTitle)) {
                    background_content = msg_html;
                } else if (contentTitle.equals(problemTitle)) {
                    problem_content = msg_html;
                } else if (contentTitle.equals(goalTitle)) {
                    goal_content = msg_html;
                } else {
                    // 不处理
                }
            }

            pageDataMap.put("background_content", background_content);
            pageDataMap.put("problem_content", problem_content);
            pageDataMap.put("goal_content", goal_content);
//
//            System.out.println("\nbackground_content:::::  \n" + background_content);
//            System.out.println("\nproblem_content:::::  \n" + problem_content);
//            System.out.println("\ngoal_content:::::  \n" + goal_content);

        } else if (type == 2) {
            describe_content = div_msg_list.get(0).html();

            pageDataMap.put("describe_content", describe_content);

//            System.out.println("\ndescribe_content:::::  \n" + describe_content);
        } else {
            // 不处理
            return null;
        }

        return pageDataMap;
    }
}
